package com.i2works.smartluolong.utils.basecommon;

import com.alibaba.fastjson.JSONObject;
import com.i2works.smartluolong.utils.base.AppConstant;
import com.i2works.smartluolong.utils.base.GlobalConstant;
import com.i2works.smartluolong.utils.base.MsgEnum;
import com.i2works.smartluolong.utils.common.BaseUtils;
import com.i2works.smartluolong.utils.common.UploadUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

/**
 * 公共上传
 *
 * @author Liu Yutao <koal@vip.qq.com>
 * @date 2018/1/19 9:18
 */

public abstract class BaseUploadController extends UploadUtil {


    /**
     * 批量上传
     */
    public JSONObject index(MultipartFile[] files, Integer filesType) {
        JSONObject json = new JSONObject();
        if (filesType == null) {
            filesType = GlobalConstant.fileType.FILES;
        }
        try {
            //判断file数组不能为空并且长度大于0
            if (files != null && files.length > 0) {
                //循环获取file数组中得文件
                for (MultipartFile file : files) {
                    //初始化上传参数（物理路径、域名访问地址、后缀）
                    initUpload(filesType, null);
                    super.upload(file, filesType);
                    json.put("url", GlobalConstant.DEFAULT_UP_PATH + super.getFileUrl());
                    json.put("domain", StringUtils.isNotBlank(AppConstant.UPLOAD_FILES_DOMAIN) ? AppConstant.UPLOAD_FILES_DOMAIN : "/");
                    json.put("originalName",file.getOriginalFilename());
                    json.put("name", super.getFileName());
                    json.put("size", super.getFileSize());
                    json.put("nodeId", UUID.randomUUID().toString());
                    json.put("status", true);
                }
            } else {
                json.put("status", false);
                json.put("message", MsgEnum.UPLOAD_FILE_EMPTY.getMsg());
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
            json.put("status", false);
            json.put("message", MsgEnum.UPLOAD_FILE_ERROR.getMsg());
        }
        return json;
    }

    /**
     * 路径初始化
     *
     * @param fileType 文件类型
     * @param subDir   子目录文件，默认为null，从配置中读取图片和文件路径
     */
    private void initUpload(Integer fileType, String subDir) {
        //判断文件或图片保存的物理路径
        //如果是文件
        if (fileType.equals(GlobalConstant.fileType.FILES)) {
            //后缀
            setAllowSuffix(GlobalConstant.suffix.FILES);
            //子目录
            if (StringUtils.isNotBlank(subDir)) {
                setSubPath(subDir);
            } else {
                setSubPath(AppConstant.UPLOAD_FOLDER_FILES);
            }
        }
        //如果是证照
        else if (fileType.equals(GlobalConstant.fileType.IDCARD)) {
            //后缀
            setAllowSuffix(GlobalConstant.suffix.IMAGE);
            //子目录
            if (StringUtils.isNotBlank(subDir)) {
                setSubPath(subDir);
            } else {
                setSubPath(AppConstant.UPLOAD_FOLDER_IDCARD);
            }
        }

        //如果是图片
        else if (fileType.equals(GlobalConstant.fileType.IMAGE)) {
            //后缀
            setAllowSuffix(GlobalConstant.suffix.IMAGE);
            //子目录
            if (StringUtils.isNotBlank(subDir)) {
                setSubPath(subDir);
            } else {
                setSubPath(AppConstant.UPLOAD_FOLDER_IMAGES);
            }
        }

        //如果图片物理路径已配置
        if (StringUtils.isNotBlank(AppConstant.UPLOAD_FILES_PATH)) {
            //默认物理路径 = 图片网站物理路径
            setDirPath(AppConstant.UPLOAD_FILES_PATH + GlobalConstant.DEFAULT_UP_PATH);
        } else {
            //默认物理路径 = 当前网站物理路径
            setDirPath(BaseUtils.getRootPath() + GlobalConstant.DEFAULT_UP_PATH);
        }
    }
}
